package org.server.http.core;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 请求对象
 * 
 * @author Admin
 * 
 */
public class HttpRequest {
	// 请求的完整路径
	private String requestURI;
	// 请求的servlet路径
	private String servletURI;
	// 请求方法
	private String method;
	// 远程ip
	private String remoteAddr;
	// 请求路径(请求的服务路径)
	private String servletPath;
	// 查询字符串
	private String queryString;
	// 请求头集合
	private Map<String, String> header;
	// 数据读取流
	private InputStream inputStream;
	// 请求参数集合
	private Map<String, String[]> paramsMap;

	/**
	 * 构造
	 */
	protected HttpRequest() {
		paramsMap = new HashMap<String, String[]>();
	}

	/**
	 * 获取所有的请求参数和值的映射
	 * 
	 * @return
	 */
	protected Map<String, String[]> getParamsMap() {
		return paramsMap;
	}

	/**
	 * 获取请求的servlet位置
	 * 
	 * @return the servletURI
	 */
	public String getServletURI() {
		return servletURI;
	}

	/**
	 * 设置请求servlet位置
	 * 
	 * @param servletURI
	 *            the servletURI to set
	 */
	void setServletURI(String servletURI) {
		this.servletURI = servletURI;
	}

	/**
	 * 返回所有请求参数和值的映射
	 * 
	 * @param paramsMap
	 */
	public void setParamsMap(Map<String, String[]> paramsMap) {
		this.paramsMap = paramsMap;
	}

	/**
	 * 获取指定参数值
	 * 
	 * @param name
	 * @return
	 */
	public String getParameter(String name) {
		String[] value = paramsMap.get(name);
		if (value == null) {
			return null;
		}
		// 默认返回最后一个值
		return value[value.length - 1];
	}

	/**
	 * 获取指定名称的请求头
	 * 
	 * @param name
	 * @return
	 */
	public String getHeader(String name) {
		return null;
	}

	/**
	 * 获取请求的完整路径
	 * 
	 * @return
	 */
	public String getRequestURI() {
		return requestURI;
	}

	/**
	 * 设置请求的完整路径
	 * 
	 * @param requestURI
	 */
	protected void setRequestURI(String requestURI) {
		this.requestURI = requestURI;
	}

	/**
	 * 获取请求方法
	 * 
	 * @return
	 */
	public String getMethod() {
		return method;
	}

	/**
	 * 设置请求方法
	 * 
	 * @param method
	 */
	protected void setMethod(String method) {
		this.method = method;
	}

	/**
	 * 获取远程地址
	 * 
	 * @return
	 */
	public String getRemoteAddr() {
		return remoteAddr;
	}

	/**
	 * 设置远程地址
	 * 
	 * @param remoteAddr
	 */
	protected void setRemoteAddr(String remoteAddr) {
		this.remoteAddr = remoteAddr;
	}

	public String getServletPath() {
		return servletPath;
	}

	protected void setServletPath(String servletPath) {
		this.servletPath = servletPath;
	}

	/**
	 * 获取请求的字符串
	 * 
	 * @return
	 */
	public String getQueryString() {
		return queryString;
	}

	/**
	 * 设置请求字符串
	 * 
	 * @param queryString
	 */
	protected void setQueryString(String queryString) {
		this.queryString = queryString;
	}

	/**
	 * 返回请求头集合
	 * 
	 * @return
	 */
	public Map<String, String> getHeader() {
		return header;
	}

	/**
	 * 返回数据读取流
	 * 
	 * @return
	 */
	public InputStream getInputStream() {
		return inputStream;
	}

	/**
	 * 设置数据读取流对象
	 * 
	 * @param inputStream
	 */
	protected void setInputStream(InputStream inputStream) {
		this.inputStream = inputStream;
	}

	/**
	 * 废黜请求头集合
	 * 
	 * @param header
	 */
	protected void setHeader(Map<String, String> header) {
		this.header = header;
	}

}
